---
title: 从对象存储中读取Avro数据
---

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

PXF 对象存储连接器支持读取Avro格式数据。 本节描述如何使用PXF访问对象存储中的Avro数据， 包括创建和查询引用对象存储中Avro文件的外部表。

**注意**: 从对象存储访问Avro格式数据与访问HDFS中的Avro格式数据非常相似。 本主题标识了读取对象存储所需的特定信息，并在通用信息的位置链接到 [PXF HDFS Avro 文档](hdfs_avro.html)。


## <a id="prereq"></a>先决条件

在您尝试从对象存储中读取数据前，确保已满足PXF 对象存储[先决条件](access_objstore.html#objstore_prereq) 。

## <a id="avro_work"></a>使用Avro数据

有关Apache Avro数据序列化框架的说明，请参考PXF HDFS Avro文档中的[使用Avro数据](hdfs_avro.html#avro_work)

## <a id="avro_cet"></a>创建外部表

使用 `<objstore>:avro` 配置文件从对象存储中读取Avro格式文件。PXF 支持以下 `<objstore>` 配置前缀：

| 对象存储  | 配置前缀 |
|-------|-------------------------------------|
| Azure Blob Storage   | wasbs |
| Azure Data Lake    | adl |
| Google Cloud Storage    | gs |
| Minio    | s3 |
| S3    | s3 |

以下语法创建一个引用Avro格式文件的Greenplum数据库可读外部表：

``` sql
CREATE EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<path-to-file>?PROFILE=<objstore>:avro&SERVER=<server_name>[&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
```

[CREATE EXTERNAL TABLE](../ref_guide/sql_commands/CREATE_EXTERNAL_TABLE.html)命令中使用的特定关键字和值见下表中描述。

| 关键字  | 值 |
|-------|-------------------------------------|
| \<path&#8209;to&#8209;file\>    |  对象存储中文件或目录的绝对路径 |
| PROFILE=\<objstore\>:avro    | `PROFILE` 必须指定为特定的对象存储。例如， `s3:avro` |
| SERVER=\<server_name\>    | PXF 访问数据时使用的服务配置 |
| \<custom&#8209;option\>=\<value\> | 特定于Avro的自定义选项描述见 [PXF HDFS Avro 文档](hdfs_avro.html#customopts) |
| FORMAT 'CUSTOM' |  在 `<objstore>:avro` 配置文件中使用 `FORMAT` `'CUSTOM'`。`CUSTOM` `FORMAT` 要求您指定为 `(FORMATTER='pxfwritable_import')`。|

如果要访问S3 对象存储，则可以如 [覆盖S3服务配置](access_objstore.html#s3_override) 中所述直接在 `CREATE EXTERNAL TABLE` 命令中提供S3凭据。

## <a id="example"></a>示例

有关Avro示例，请参阅PXF HDFS Avro 文档中的 [示例: 读取Avro数据](hdfs_avro.html#avro_example)。在对象存储中运行示例，必要的修改如下：

- 将文件复制到对象存储而不是HDFS。 例如，将文件复制到S3：

    ``` shell
    $ aws s3 cp /tmp/pxf_avro.avro s3://BUCKET/pxf_examples/
    ```

- 使用上述的 `CREATE EXTERNAL TABLE` 语法和 `LOCATION` 关键字及设置。例如， 假设您的服务名为 `s3srvcfg` ：

    ``` sql
    CREATE EXTERNAL TABLE pxf_s3_avro(id bigint, username text, followers text, fmap text, relationship text, address text)
      LOCATION ('pxf://BUCKET/pxf_examples/pxf_avro.avro?PROFILE=s3:avro&SERVER=s3srvcfg&COLLECTION_DELIM=,&MAPKEY_DELIM=:&RECORDKEY_DELIM=:')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
    ```

